#ifndef NEURON_TYPE_H
#define NEURON_TYPE_H

#include <nemo.hpp>
#include <math.h>
#include <vector>
#include <iostream>
#include <string.h>
#include <stdlib.h>

using std::vector;
using namespace nemo;

// Convenience class for specifying Iz-style neuron parameters
class NeuronType
{
protected:
  std::string _type;
  std::string _name;
  int _num_params;
  float* _params;

public:
  std::string getType(void) { return _type; }
  std::string getName(void) { return _name; }

  int getNumParams(void) { return _num_params; }
  const float* getParams(void) { return _params; }

  virtual float generateOutboundWeight(void) { return 0; }

};

class IzhikevichNeuronType : public NeuronType {
  
public:
  IzhikevichNeuronType(std::string name, int _num_params, float* params);
  ~IzhikevichNeuronType(void);

  void setWeights(float min, float max);


  virtual float generateOutboundWeight(void);

protected:
  float _min_out_weight;
  float _max_out_weight;
  
};

#endif
